﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using ModeloGaleriaNET;
using System.Data.Objects;
using CADs;

namespace GaleriaNET
{
    /// <summary>
    /// Lógica de interacción para AuditoriaFilterWindow.xaml
    /// </summary>
    public partial class AuditoriaFilterWindow : Window
    {
        private List<AuditoriaFilter> filters;
        private bool success;

        public AuditoriaFilterWindow()
        {
            InitializeComponent();
            filters = new List<AuditoriaFilter>();
        }

        public bool Success
        {
            get { return success; }
        }

        public List<AuditoriaFilter> Filters
        {
            get { return filters; }
        }

        private void btCancelar_Click(object sender, RoutedEventArgs e)
        {
            success = false;
            Close();
        }

        private void btAceptar_Click(object sender, RoutedEventArgs e)
        {
            AuditoriaFilter filtro;
            DateTime fechaIni, fechaFin;

            #region Fechas
            if (cbCriterioFecha.SelectedIndex != -1 && dtpFecha1.SelectedDate != null && (!dtpFecha2.IsEnabled || (dtpFecha2.IsEnabled && dtpFecha2.SelectedDate != null)))
            {
                fechaIni = dtpFecha1.SelectedDate.Value;
                fechaFin = dtpFecha2.IsEnabled ? dtpFecha2.SelectedDate.Value : DateTime.Now;
                switch (cbCriterioFecha.SelectedIndex)
                {
                    case 0:                          
                        filtro = new AuditoriaFilter("it.fecha >= @inputFecha");
                        filtro.Parameters.Add(new ObjectParameter("inputFecha",
                            fechaIni));
                        break;
                    case 1:
                        filtro = new AuditoriaFilter("it.fecha <= @inputFecha");
                        filtro.Parameters.Add(new ObjectParameter("inputFecha",
                            fechaIni));
                        break;
                    case 2:
                        filtro = new AuditoriaFilter("it.fecha between @inputFecha1 and @inputFecha2");
                        filtro.Parameters.Add(new ObjectParameter("inputFecha1",
                            fechaIni));
                        filtro.Parameters.Add(new ObjectParameter("inputFecha2",
                            fechaFin));
                        break;
                    default:
                        filtro = null;
                        break;
                }

                filters.Add(filtro);
            }
            #endregion

            #region Usuario
            if (cbUsuarios.ItemsSource != null && cbUsuarios.SelectedIndex != -1)
            {
                filtro = new AuditoriaFilter("it.usuario = @inputUser");
                filtro.Parameters.Add(new ObjectParameter("inputUser",
                    Convert.ToInt32(cbUsuarios.SelectedValue)));
                filters.Add(filtro);
            }
            #endregion

            #region Tipo
            if (cbTipos.ItemsSource != null && cbTipos.SelectedIndex != -1)
            {
                filtro = new AuditoriaFilter("it.tipo = @inputTipo");
                filtro.Parameters.Add(new ObjectParameter("inputTipo",
                    Convert.ToInt32(cbTipos.SelectedValue)));
                filters.Add(filtro);
            }
            #endregion

            #region Descripción
            if (!string.IsNullOrWhiteSpace(tbDescripcion.Text))
            {
                filtro = new AuditoriaFilter("it.descripcion like '%" + tbDescripcion.Text + "%'");
                //filtro.Parameters.Add(new ObjectParameter("inputDesc", tbDescripcion.Text));
                filters.Add(filtro);
            }
            #endregion
            success = true;
            Close();
        }

        private void cbUsuarios_GotFocus(object sender, RoutedEventArgs e)
        {
            if (cbUsuarios.ItemsSource == null)
            {
                cbUsuarios.ItemsSource = new UsuarioCAD().GetUsuariosIdNombre();
                cbUsuarios.DisplayMemberPath = "PseudonimoLocal";
                cbUsuarios.SelectedValuePath = "Id";
                cbUsuarios.SelectedIndex = -1;
            }
        }

        private void cbTipos_GotFocus(object sender, RoutedEventArgs e)
        {
            if (cbTipos.ItemsSource == null)
            {
                cbTipos.ItemsSource = new TipoAuditoriaCAD().GetTipoAuditoriaIdNombre();
                cbTipos.DisplayMemberPath = "Nombre";
                cbTipos.SelectedValuePath = "Id";
                cbTipos.SelectedIndex = -1;
            }
        }

        private void cbCriterioFecha_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            dtpFecha2.IsEnabled = cbCriterioFecha.SelectedIndex == 2;
        }
    }
}
